/**
 * login.js
 * 登录相关API接口封装
 */
import request from '../utils/request.js';
import { saveLoginInfo, saveUserInfo } from '../utils/storage.js';

/**
 * 发送验证码
 * @param {string} phone - 手机号
 * @param {string} type - 类型：'login'或'register'
 * @returns {Promise} - 返回Promise对象
 */
export const sendCode = async (phone, type = 'login') => {
  try {
    // 不需要token的接口，设置header中的Authorization为空
    const response = await request({
      url: '/auth/auth/sms/send',
      method: 'POST',
      data: {
        phone,
        type
      },
      header: {
        Authorization: ''
      }
    });
    
    return response;
  } catch (error) {
    console.error('发送验证码失败:', error);
    // 处理错误响应
    if (error.data) {
      throw new Error(error.data.msg || '发送验证码失败');
    }
    throw error;
  }
};

/**
 * 用户登录
 * @param {string} phone - 手机号
 * @param {string} code - 验证码
 * @returns {Promise} - 返回Promise对象，包含token和userId
 */
export const login = async (phone, code) => {
  let response;
  try {
    // 不需要token的接口，设置header中的Authorization为空
    response = await request({
      url: '/auth/auth/sms/login',
      method: 'POST',
      data: {
        phone,
        code
      },
      header: {
        Authorization: ''
      }
    });
    
    // 如果登录成功，存储token和用户信息
    if (response.code === 200 && response.data) {
      const { token, userinfo } = response.data;
      // 保存token和用户ID（从userinfo中获取）
      saveLoginInfo(token, userinfo?.id || '');
      // 保存完整的用户信息
      saveUserInfo(userinfo);
    }
    
    return response;
  } catch (error) {
    console.error('登录失败:', error);
    // 处理错误响应
    if (error.data) {
      throw new Error(error.data.msg || '登录失败');
    }
    throw error;
  }
};

/**
 * 登出功能
 * 清除本地存储的登录信息
 */
export const logout = () => {
  try {
    // 清除登录信息
    const { clearLoginInfo } = require('../utils/storage.js');
    clearLoginInfo();
    
    // 这里可以选择调用后端登出接口
    // await request({
    //   url: '/logout',
    //   method: 'POST'
    // });
    
    return { success: true };
  } catch (error) {
    console.error('登出失败:', error);
    return { success: false, error: error.message };
  }
};